home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / common / ltostr.c < prev    next >
C/C++ Source or Header  |  1996-07-24  |  2KB  |  80 lines

  1. /*
  2.  * static char *rcsid_ltostr_c =
  3.  *   "$Id: ltostr.c,v 1.4 1994/03/29 08:23:39 master Exp $";
  4.  */
  5.  
  6. /*
  7.     CrossFire, A Multiplayer game for X-windows
  8.  
  9.     Copyright (C) 1992 Frank Tore Johansen
  10.  
  11.     This program is free software; you can redistribute it and/or modify
  12.     it under the terms of the GNU General Public License as published by
  13.     the Free Software Foundation; either version 2 of the License, or
  14.     (at your option) any later version.
  15.  
  16.     This program is distributed in the hope that it will be useful,
  17.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.     GNU General Public License for more details.
  20.  
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24.  
  25.     The author can be reached via e-mail to frankj@ifi.uio.no.
  26. */
  27.  
  28. #include <global.h>
  29.  
  30. /*
  31.  * returns a char-pointer to a static array, in which a representation
  32.  * of the decimal number given will be stored.
  33.  */
  34.  
  35. char *ltostr10(signed long n) {
  36.   static char buf[10];
  37.   char *cp=buf+9;
  38.   long flag;
  39.  
  40.   *cp='\0';
  41.   if(n<0)
  42.     flag= n = -n;
  43.   else
  44.     flag=0;
  45.   do {
  46.     *(--cp) = '0'+n%10;
  47.     n/=10;
  48.   } while(n);
  49.   if(flag)
  50.     *(--cp)='-';
  51.   return cp;
  52. }
  53.  
  54. /*
  55.  * A fast routine which appends the name and decimal number specified
  56.  * to the given buffer.
  57.  * Could be faster, though, if the strcat()s at the end could be changed
  58.  * into alternate strcat which returned a pointer to the _end_, not the
  59.  * start!
  60.  */
  61.  
  62. void save_long(char *buf, char *name, long n) {
  63. #if 0 /* This doesn't work, since buf is always the beginning */
  64.   char *cp, *var;
  65.   for(cp=buf;*name!='\0';)
  66.     *cp++ = *name++;
  67.   *cp++=' ';
  68.   for(var=ltostr10(n);*var!='\0';)
  69.     *cp++ = *name++;
  70.   *cp='\0';
  71. #else
  72.   char buf2[MAX_BUF];
  73.   strcpy(buf2,name);
  74.   strcat(buf2," ");
  75.   strcat(buf2,ltostr10(n));
  76.   strcat(buf2,"\n");
  77.   strcat(buf,buf2);
  78. #endif
  79. }
  80.